import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;



public class Program {
	
	private static String caminoLista;
	private static String caminoAdjuntos;
	private static String cuentaEnvio;
	private static String contraseñaEnvio;
	private static String asunto;
	private static List<Receptor> receptores;
	
	private Program(){}
	
	public static boolean EntradaDatos(){
		System.out.println("Bienvenido al sistema LISTA DE DISTRIBUCION");
		System.out.println();
		try {
			ArmarCuentaEnvio();
		} catch (Exception e) {
			System.out.println("Los datos de la Cuenta Envio no pudieron ser encontrados. El programa se cerrara.");
			return false;
		}
		System.out.print("Ingrese el nombre de la lista de distribucion que desea usar: ");
		try {
			asunto = System.console().readLine();
			ArmarCaminoLista();
		} catch (Exception e) {
			System.out.println("La lista no pudo ser encontrada. El programa se cerrara.");
			return false;
		}
		System.out.println("La lista se ha cargado correctamente.");
		// cambiar por ¿hay adjuntos?:
		System.out.print("Ingrese el nombre de la carpeta con los archivos adjuntos: ");
		try {
			ArmarCaminoAdjuntos( System.console().readLine() );
		} catch (Exception e) {
			System.out.println("La carpeta no pudo ser encontrada. El programa se cerrara.");
			return false;
		}
		System.out.println("La carpeta de adjuntos se ha cargado correctamente.");
		System.out.print("A continuacion se enviaran los mails. ¿Desea continuar? s/n: ");
		if ( (System.console().readLine() == "n") || (System.console().readLine() == "N") )
			return false;
		System.out.println();
		return true;
	}
	
	public static boolean EnvioMails(){
		 try {
			CompletarReceptores();
		} catch (Exception e) {
			System.out.println("Se produjo un error cargando la lista de distribucion. El programa se cerrara.");
			return false;
		}
		 try {
				ConfigurarEnvio();
			} catch (Exception e) {
				System.out.println("Se produjo un error en el envio. El programa se cerrara.");
				return false;
			}
		 return true;
	}
	
	private static void ConfigurarEnvio() throws Exception{
		System.out.println();
		for (int i = 0 ; i <= receptores.size() ; i++ ){
			System.out.print("Enviando: ");
			System.out.print(receptores.get(i).cuit);System.out.print(" - ");
			System.out.print(receptores.get(i).nombre);System.out.print(" - "); // defenir maximo
			System.out.print(receptores.get(i).correo);System.out.print(" - ");
			String asuntoFinal = "[" + receptores.get(i).nombre + "] " + asunto;
			String caminoAdjuntoFinal = caminoAdjuntos + receptores.get(i).cuit + ".pdf" ;
			String nombreArchivoFinal = asuntoFinal + ".pdf" ;
			String mensajeFinal = CargarMensaje();
			System.out.println();
			System.out.println(cuentaEnvio);
			System.out.println(contraseñaEnvio);
			System.out.println(receptores.get(i).correo);
			System.out.println(asuntoFinal);
			System.out.println(mensajeFinal);
			System.out.println(caminoAdjuntoFinal);
			System.out.println(nombreArchivoFinal);
			GoogleMail.Send(cuentaEnvio, contraseñaEnvio, receptores.get(i).correo,
					asuntoFinal, mensajeFinal, caminoAdjuntoFinal, nombreArchivoFinal);
		}
	}
	
	private static String CargarMensaje() throws Exception{
		String camino = ArmarCaminoMensaje();
		BufferedReader reader = new BufferedReader(new FileReader(camino));
		String linea = reader.readLine();
		String mensaje = "";
		String eol = System.getProperty("line.separator");
		while (linea != null){
			mensaje = mensaje + linea + eol;
			linea = reader.readLine();
		}
		return mensaje;
	}
	
	private static void CompletarReceptores() throws Exception{
		receptores = new ArrayList<Receptor>();
		BufferedReader reader = new BufferedReader(new FileReader(caminoLista));
		String linea = reader.readLine();
		while ( linea != null ){
			if ( ! linea.startsWith("#") ){
				String[] campos = linea.split(";");
				if (campos.length >= 3){
					Receptor nuevoReceptor = new Receptor(campos[0], campos[1], campos[2]);
					receptores.add(nuevoReceptor);
				}
			}
			linea = reader.readLine();
		}
		reader.close();
	}
	
	
	private static void ArmarCaminoLista() throws Exception{
		String camino = new File(".").getAbsolutePath();
		camino = camino.substring(0, camino.length() - 1);
		camino = camino + "Listas/" + asunto + ".txt";
		ComprobarArchivo(camino);
		caminoLista = camino;
	}
	
	
	private static void ArmarCuentaEnvio() throws Exception{
		String camino = new File(".").getAbsolutePath();
		camino = camino.substring(0, camino.length() - 1);
		camino = camino + "CuentaEnvio.txt";
		CargarDatosCuentaEnvio(camino);
	}
	
	
	private static void ArmarCaminoAdjuntos(String nombre) throws Exception{
		String camino = new File(".").getAbsolutePath();
		camino = camino.substring(0, camino.length() - 1);
		camino = camino + "Adjuntos/" + nombre + "/";
		// ver como comprobar
		caminoAdjuntos = camino;
	}
	
	
	private static String ArmarCaminoMensaje(){
		String camino = new File(".").getAbsolutePath();
		camino = camino.substring(0, camino.length() - 1);
		camino = camino + "Mensajes/" + asunto + ".txt";
		return camino;
	}
	
	
	private static void ComprobarArchivo(String camino) throws Exception{
		BufferedReader reader = new BufferedReader(new FileReader(camino));
		reader.close();
	}
	
	
	private static void CargarDatosCuentaEnvio(String camino) throws Exception{
		BufferedReader reader = new BufferedReader(new FileReader(camino));
		String linea = PasarLineas(reader);
		if ( linea == null )
			throw new Exception();
		cuentaEnvio = linea;
		linea = PasarLineas(reader);
		if ( linea == null )
			throw new Exception();
		contraseñaEnvio = linea;
		reader.close();
	}
	
	
	private static String PasarLineas(BufferedReader archivo) throws Exception{
		String linea = archivo.readLine();
		while ( (linea != null) && linea.startsWith("#") ){
			linea = archivo.readLine();
		}
		return linea;
	}

}
